package com.tqz.zookeeper.queue.springboot;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.queue.DistributedQueue;
import org.apache.curator.framework.recipes.queue.QueueBuilder;

import java.io.IOException;

/**
 * 分布式队列消费者.
 *
 * @author <a href="https://github.com/tian-qingzhao">tianqingzhao</a>
 * @since 2025/9/5 19:53
 */
public class DistributedQueueConsumer {

    public static void main(String[] args) {
        DistributedQueue<String> queue = null;
        try {
            CuratorFramework client = ZKQueueUtils.getClient();

            // 创建分布式队列
            QueueBuilder<String> builder = QueueBuilder.builder(
                    client,
                    ZKQueueUtils.queueConsumer(),
                    ZKQueueUtils.createQueueSerializer(),
                    ZKQueueUtils.QUEUE_NAME);
            // 指定了一个锁节点路径/orderlock，用于实现分布式锁，以保证队列操作的原子性和顺序性。
            queue = builder.lockPath("/orderlock").buildQueue();
            // 启动队列，这时队列开始监听ZooKeeper中/order节点下的消息。
            queue.start();
            // 阻塞进程
            System.in.read();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (queue != null) {
                    queue.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
